package com.demo.springboot;

import com.demo.springboot.dao.IUserDao;
import com.demo.springboot.dao.UserDao;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

/**
 * AOP 开发流程
 * 1.加入Spring-boot-start-aop 依赖，就默认开启了Aop
 * 2.写一个Aspect，封装横切关注点(日志，监控等等)，需要配置通知(前置通知，后置通知等等和切入点（那些包的哪些类的那些方法）)
 * 3.这个Aspect 需要纳入到Spring容器中，并且要加@Aspect注解
 *
 * spring.aop.auto= 配置项决定是否自动使用Aop，默认自动使用
 *
 * spring.aop.proxy-target-class=
 *      默认(=false)使用基于JDK的静态代理来实现Aop,
 *    =true，表示使用CGLIB 的
 *      如果配置了false,没有实现接口，依然使用CGLIB
 *
 */
@EnableAspectJAutoProxy(exposeProxy = true)
@SpringBootApplication
public class App {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(App.class,args);
        System.out.println(context.getBean(IUserDao.class).getClass());
        context.getBean(IUserDao.class).addUser("admin","root");
        context.close();
    }
}
